/* 
 *  author: Gregorovichz Carlos Rossi
 *  date: 31/03/2010
 */

var registroPerfil=null;
var registroRecurso=null;
var dsRecurso=null;
var dsRecursos =null;
var winAgregarPerfil =null;
var winModificarPerfil=null;
var winAgregarRecurso=null;
function gestionarPerfil(){
    var chkEstadoEstructura = new Ext.grid.CheckColumn({
        header: "Estado",
        dataIndex: 'bperfActivo',
        width: 55
    });
    chkEstadoEstructura.onMouseDown=function(e,t){};
    var dsPerfiles=new Ext.data.Store({
        autoDestroy: true,
        url: "lista-perfil",
        reader: new Ext.data.JsonReader(
        {
            root: "perfil",
            fields:
            [
            {
                name: "nperfIdentificador",
                type: "integer"
            },
            {
                name: "cperfNombre"
            },{
                name: "cperfDescripcion"
            },
            {
                name: "bperfActivo",
                type: "bool"
            }
            ]
        })
    });
    dsPerfiles.on("exception",function(proxy, type, action, options, response, arg){
        Ext.MessageBox.alert("Error","Sucedio un error al cargar los perfiles"+response.responseText);
    });

    var grdPerfiles=new Ext.grid.GridPanel({
        title: "Administrar Perfiles",
        store: dsPerfiles,
        height:200,
        columns:
        [new Ext.grid.RowNumberer(),
        {
            header: "Nombre",
            dataIndex: "cperfNombre",
            width: 200,
            sortable:true
        },
        chkEstadoEstructura
        ],
        tbar:[{
            text:'Agregar',
            iconCls:'icon-add',
            handler: function(){
                agregarPerfil();
            }
        }, '-', {
            text:'Modificar',
            iconCls:'icon-modify',
            handler: function(){
                modificarPerfil(registroPerfil);
            }
        },'-',{
            text:'Eliminar',
            iconCls:'icon-delete',
            handler: function(){
                Ext.MessageBox.confirm("Confirmación", "Eliminar Registro", function(button){
                    if(button == "yes") {
                        eliminarPerfil();
                    }
                });
            }
        }]
    });
    grdPerfiles.on("rowclick",function(grid,rowIndex,e){
        registroPerfil=grid.getStore().getAt(rowIndex);
        dsRecursos.reload({
            params:{
                nperfilcodigo:registroPerfil.data.nperfIdentificador
            }
        });
    });

    dsPerfiles.load();
    var frmPerfil=new Ext.Panel({
        title: "",
        bodyBorder:false,
        height:200,
        border:false,
        bodyStyle: "background-color:#DFE8F6; border:0",
        items:grdPerfiles
    });
    var chkEstadoRecurso= new Ext.grid.CheckColumn({
        header: "Estado",
        dataIndex: 'bpereActivo',
        width: 55
    });
    chkEstadoRecurso.onMouseDown=function(e,t){};
    dsRecursos=new Ext.data.Store({
        autoDestroy: true,
        url: "lista-perfil-recurso",
        reader: new Ext.data.JsonReader(
        {
            root: "perfilrecurso",
            fields:
            [{
                name: "npereIdentificador",
                type: "int"
            },{
                name: "nmoduIdentificador",
                type: "int"
            },{
                name: "cmoduDescripcion",
                type: "string"
            },{
                name: "nrecuIdentificador",
                type: "int"
            },{
                name: "crecuNombre",
                type: "string"
            },{
                name: "crecuURL",
                type: "string"
            },{
                name: "bpereActivo",
                type: "bool"
            }]
        })
    });
    dsRecursos.on("exception",function(proxy, type, action, options, response, arg){
        Ext.MessageBox.alert("Error",response.responseText);
    });

    var columnGridRecursos = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),{
        header: "Modulo",
        width:250,
        readOnly: true,
        sortable: true,
        dataIndex: 'cmoduDescripcion'
    },{
        header: "Recurso",
        width:200,
        readOnly: true,
        sortable: true,
        dataIndex: 'crecuNombre'
    },{
        header: "Funcion - URL",
        width:350,
        readOnly: true,
        sortable: true,
        dataIndex: 'crecuURL'
    },chkEstadoRecurso
    ]);

    var gridRecursos = new Ext.grid.GridPanel({
        title: "Administrar Recursos",
        store: dsRecursos,
        cm:columnGridRecursos,
        height:274,
        plugins:[new Ext.ux.grid.Search({
            mode:'local',
            iconCls:false,
            minLength:2,
            width: 390
        })],
        tbar:[{
            text: "Asignar Recursos",
            iconCls:'icon-add',
            handler: function() {
                cargarAsignarRecursos(registroPerfil);
            }
        }
        ]
    });
    var seleccionRecurso=gridRecursos.getSelectionModel();
    seleccionRecurso.on("rowselect",function(sm,fila,registro){
        registroRecurso=registro;
    });
    dsRecursos.reload({
        params:{
            nperfilcodigo:'0'
        }
    });

    var frmRecurso=new Ext.Panel({
        title: "",
        bodyBorder:false,
        height:200,
        border:false,
        bodyStyle: "background-color:#DFE8F6; border:0",
        items:gridRecursos
    });
    var win = new Ext.Window({
        title:'Mantenimiento de Perfiles/Recursos',
        closeAction:'destroy',
        width:1050,
        height:510,
        x:0,
        y:0,
        shim:false,
        maximizable:false,
        resizable: false,
        animCollapse:false,
        layout:'border',
        items:[{
            region: 'north',
            height: 200,
            split: false,
            border:false,
            layout:'fit',
            xtype: 'panel',
            items: frmPerfil
        },{
            region: 'center',
            height: 200,
            split: false,
            border:false,
            xtype: 'panel',
            layout:'fit',
            bodyStyle: "background-color:#DFE8F6; border:0",
            items: frmRecurso
        }]
    });
    win.show();
}

function agregarPerfil(){
    var frmGestionarPerfil =new Ext.Panel({
        bodyBorder:true,
        height:350,
        bodyStyle: "background-color:#DFE8F6; border:0"
    });
    new Ajax.Request("frmGestionarPerfil.html",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            frmGestionarPerfil.html=transport.responseText;
            winAgregarPerfil= new Ext.Window({
                title:'Agregar Perfil',
                closeAction:'destroy',
                width:400,
                height:200,
                items:[frmGestionarPerfil],
                shim:false,
                modal:true,
                maximizable:true,
                minimizable:false,
                animCollapse:false,
                resizable:false,
                constrainHeader:true,
                bbar:[{
                    text:'Grabar',
                    iconCls:'icon-save',
                    handler: function(){
                        insertarPerfil();
                    }
                }, '-', {
                    text:'Cancelar',
                    iconCls:'icon-cancel',
                    handler: function(){
                        winAgregarPerfil.destroy();
                    }
                }]
            });
            winAgregarPerfil.show();
            winAgregarPerfil.focus();
        },
        onFailure:function(t){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+t.responseText);
        }
    });
}
function insertarPerfil(){
    $("bperfActivo").value = $("estadoperfil").checked;
    var form = $("frmgestionarperfil");
    if(form.cperfNombre.value.length == 0) {
        Ext.MessageBox.show({
            title: "Error",
            msg: "Debe llenar el nombre.",
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.ERROR
        });
        return;
    }
    if(form.cperfDescripcion.value.length == 0) {
        Ext.MessageBox.show({
            title: "Error",
            msg: "Debe llenar la descripción.",
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.ERROR
        });
        return;
    }
    new Ajax.Request("perfil!agregar",{
        method:"post",
        parameters: $("frmgestionarperfil").serialize(),
        onSuccess: function(transport){
            var operacion =transport.responseText.evalJSON();
            if (operacion.success){
                Information("Aviso del Sistema",operacion.mensaje);
            }else{
                Information("Aviso del Sistema",operacion.mensaje);
            }
            winAgregarPerfil.destroy();
            gestionarPerfil();
        },
        onFailure:function(transport){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+transport.responseText);
        }
    });
}

function eliminarPerfil(){
    new Ajax.Request("perfil!eliminar",{
        method:"post",
        parameters:{
            nperfidentificador: registroPerfil.data.nperfIdentificador
        },
        onSuccess: function(transport){
            var operacion = transport.responseText.evalJSON();
            if (operacion.success){
                Information("Aviso del Sistema",operacion.mensaje);
            }else{
                Information("Aviso del Sistema",operacion.mensaje);
            }
            gestionarPerfil();
        },
        onFailure: function(transport){
            Information("Aviso del Sistema","Sucedio un error al intentar eliminar el registro"+transport.responseText);
        }
    });
}

function modificarPerfil(registro){
    var frmGestionarPerfil =new Ext.Panel({
        bodyBorder:true,
        height:350,
        bodyStyle: "background-color:#DFE8F6; border:0",
        autoLoad: {
            url: "frmGestionarPerfil.html",
            callback: function(el,success,response,options){
                $("frmgestionarperfil").nperfIdentificador.value = registro.data.nperfIdentificador;
                $("frmgestionarperfil").cperfNombre.value = registro.data.cperfNombre;
                $("frmgestionarperfil").cperfDescripcion.value = registro.data.cperfDescripcion;
                if (registro.data.bperfActivo){
                    $("estadoperfil").checked=true;
                }else{
                    $("estadoperfil").checked=false;
                }
                $("frmgestionarperfil").bperfActivo.value = registro.data.bperfActivo;
            }
        }
    });

    winModificarPerfil= new Ext.Window({
        title:'Modificar Perfil',
        closeAction:'destroy',
        width:400,
        height:200,
        items:[frmGestionarPerfil],
        shim:false,
        modal:true,
        maximizable:true,
        minimizable:false,
        animCollapse:false,
        resizable:false,
        constrainHeader:true,
        bbar:[{
            text:'Grabar',
            iconCls:'icon-save',
            handler: function(){
                actualizarPerfil();
            }
        }, '-', {
            text:'Cancelar',
            iconCls:'icon-cancel',
            handler: function(){
                winModificarPerfil.destroy();
            }
        }]
    });
    winModificarPerfil.show();
    winModificarPerfil.focus();
}

function actualizarPerfil(){
    $("bperfActivo").value = $("estadoperfil").checked;
    var form = $("frmgestionarperfil");
    if(form.cperfNombre.value.length == 0) {
        Ext.MessageBox.show({
            title: "Error",
            msg: "Debe llenar el nombre.",
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.ERROR
        });
        return;

    }

    if(form.cperfDescripcion.value.length == 0) {
        Ext.MessageBox.show({
            title: "Error",
            msg: "Debe llenar la descripción.",
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.ERROR
        });
        return;
    }
    new Ajax.Request("perfil!modificar",{
        method:"post",
        parameters: $("frmgestionarperfil").serialize(),
        onSuccess: function(transport){
            var operacion =transport.responseText.evalJSON();
            if (operacion.success){
                Information("Aviso del Sistema",operacion.mensaje);
            }else{
                Information("Aviso del Sistema",operacion.mensaje);
            }
            winModificarPerfil.destroy();
            gestionarPerfil();
        },
        onFailure:function(transport){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+transport.responseText);
        }
    });
}

function agregarRecurso(){
    var frmGestionarRecurso =new Ext.Panel({
        bodyBorder:true,
        height:350,
        bodyStyle: "background-color:#DFE8F6; border:0"
    });
    new Ajax.Request("frmGestionarRecurso.html",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            frmGestionarRecurso.html=transport.responseText;
            winAgregarRecurso= new Ext.Window({
                title:'Agregar Recurso',
                closeAction:'destroy',
                width:400,
                height:200,
                items:[frmGestionarRecurso],
                shim:false,
                modal:true,
                maximizable:true,
                minimizable:false,
                animCollapse:false,
                resizable:false,
                constrainHeader:true,
                bbar:[{
                    text:'Grabar',
                    iconCls:'icon-save',
                    handler: function(){
                        
                    }
                }, '-', {
                    text:'Cancelar',
                    iconCls:'icon-cancel',
                    handler: function(){
                        winAgregarRecurso.destroy();
                    }
                }]
            });
            winAgregarRecurso.show();
            winAgregarRecurso.focus();
            cargarModulos();
        },
        onFailure:function(t){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+t.responseText);
        }
    });
}

function cargarModulos(){
    new Ajax.Request("lista-modulos-disponibles",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            var eSelect = $("cboModulo");
            removeAllOptions(eSelect);
            var lstmodulos = transport.responseText.evalJSON();
            for (var i=0;i<lstmodulos.modulos.length;i++){
                var eOption = document.createElement("option");
                eOption.setAttribute("value", lstmodulos.modulos[i].nmoduIdentificador);
                eOption.appendChild(document.createTextNode(lstmodulos.modulos[i].cmoduDescripcion));
                eSelect.appendChild(eOption);
            }
        }
    });
}

function cargarAsignarRecursos(regPerfil) {
    var vntAsignarRecursos = new Ext.Window({
        title: "Asignar Recursos",
        modal: true,
        closeAction: "destroy",
        width: 900,
        height: 300,
        autoLoad:{
            url: "frmAsignarRecursos.html",
            callback: function(el,success,response,options) {
                cargarRecursosAsignados(regPerfil);
                cargarRecursosDisponibles(regPerfil);
                var form = $("frmAsignarRecurso");
                var cmdAsignar = form.cmdAsignar;
                cmdAsignar.onclick = function(){
                    asignarRecurso();
                }
                var cmdRevocar = form.cmdRevocar;
                cmdRevocar.onclick = function() {
                    revocarRecurso();
                }
            }
        },
        bbar:[{
            text:'Cerrar',
            iconCls:'icon-cancel',
            handler: function(){
                Information("Aviso del Sistema","Sus cambios se grabaron satisfactoriamente.");
                vntAsignarRecursos.destroy();
                dsRecursos.reload({
                    params:{
                        nperfilcodigo:registroPerfil.data.nperfIdentificador
                    }
                });
            }
        }]
    });
    vntAsignarRecursos.show();
}

function cargarRecursosAsignados(regPerfil) {
    var nperfIdentificador = regPerfil.get("nperfIdentificador");
    var form = $("frmAsignarRecurso");
    var recursosAsignados = form.lstRecursosAsignados;
    new Ajax.Request("lista-recursos-asignados",{
        method: "post",
        parameters: {
            nperfIdentificador: nperfIdentificador
        },
        onSuccess: function(t) {
            var data = t.responseText.evalJSON();
            for(var i = 0; i < data.length; i++) {
                var option = document.createElement("option");
                option.value = data[i].nrecuIdentificador;
                option.appendChild(document.createTextNode(data[i].cmoduDescripcion+" - "+data[i].crecuNombre));
                recursosAsignados.appendChild(option);
            }
        }
    });
}

function cargarRecursosDisponibles(regPerfil) {
    var nperfIdentificador = regPerfil.get("nperfIdentificador");
    var form = $("frmAsignarRecurso");
    var recursosDisponibles = form.lstRecursosDisponibles;
    new Ajax.Request("lista-recursos-asignados!disponibles",{
        method: "post",
        parameters: {
            nperfIdentificador: nperfIdentificador
        },
        onSuccess: function(t) {
            var data = t.responseText.evalJSON();
            for(var i = 0; i < data.length; i++) {
                var option = document.createElement("option");
                option.value = data[i].nrecuIdentificador;
                option.appendChild(document.createTextNode(data[i].cmoduDescripcion+" - "+data[i].crecuNombre));
                recursosDisponibles.appendChild(option);
            }
        }
    });
}

function asignarRecurso() {
    var regPerfil = registroPerfil;
    var nperfIdentificador = regPerfil.get("nperfIdentificador");
    var form = $("frmAsignarRecurso");
    var recursosDisponibles = form.lstRecursosDisponibles;
    var recursosAsignados = form.lstRecursosAsignados;
    var encontro = false;
    for(var i = 0; i < recursosDisponibles.options.length; i++) {
        if(recursosDisponibles.options[i].selected) {
            ingresarRecurso(nperfIdentificador, recursosDisponibles.options[i], recursosAsignados);
            encontro = true;
            break;
        }
    }
    if(encontro) {
        asignarRecurso();
    }
}

function ingresarRecurso(nperfIdentificador, recurso, recursosAsignados) {
    new Ajax.Request("recurso-asignado!ingresar",{
        method: "post",
        asynchronous: false,
        parameters: {
            nperfIdentificador: nperfIdentificador,
            nrecuIdentificador: recurso.value
        },
        onSuccess: function(t) {
            var data = t.responseText.evalJSON();
            if(data.success) {
                recursosAsignados.appendChild(recurso);
            }
        }
    });
}

function revocarRecurso() {
    var regPerfil = registroPerfil;
    var nperfIdentificador = regPerfil.get("nperfIdentificador");
    var form = $("frmAsignarRecurso");
    var recursosDisponibles = form.lstRecursosDisponibles;
    var recursosAsignados = form.lstRecursosAsignados;
    var encontro = false;
    for(var i = 0; i < recursosAsignados.options.length; i++) {
        if(recursosAsignados.options[i].selected) {
            eliminarRecurso(nperfIdentificador, recursosAsignados.options[i], recursosDisponibles);
            encontro = true;
            break;
        }
    }
    if(encontro) {
        revocarRecurso();
    }
}

function eliminarRecurso(nperfIdentificador, recurso, recursosDisponibles) {
    new Ajax.Request("recurso-asignado!eliminar",{
        method: "post",
        asynchronous: false,
        parameters: {
            nperfIdentificador: nperfIdentificador,
            nrecuIdentificador: recurso.value
        },
        onSuccess: function(t) {
            var data = t.responseText.evalJSON();
            if(data.success) {
                recursosDisponibles.appendChild(recurso);
            }
        }
    });
}